package org.example.day03;

import java.util.Scanner;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO +
 * <p>  开头和结尾都是元音字母（aeiouAEIOU）的字符串为 元音字符串 ，其中混杂的非元音字母数量为其 瑕疵度 。比如<span>:</span>  </p> <p>  ·         “<span>a</span>” 、 “<span>aa</span>”是元音字符串，其瑕疵度都为<span>0</span>  </p> <p>  ·         “<span>aiur</span>”不是元音字符串（结尾不是元音字符）<span></span>  </p> <p>  ·         “<span>abira</span>”是元音字符串，其瑕疵度为<span>2</span>  </p> <p>  给定一个字符串，请找出指定瑕疵度的最长元音字符子串，并输出其长度，如果找不到满足条件的元音字符子串，输出0。<span></span>  </p> <p>  子串：字符串中任意个连续的字符组成的子序列称为该字符串的子串。<span></span>  </p>
 *
 * 开头和结尾都是元音字母（aeiouAEIOU）的字符串为 元音字符串 ，其中混杂的非元音字母数量为其 瑕疵度 。比如:
 * ·         “a” 、 “aa”是元音字符串，其瑕疵度都为0
 * ·         “aiur”不是元音字符串（结尾不是元音字符）
 * ·         “abira”是元音字符串，其瑕疵度为2
 * 给定一个字符串，请找出指定瑕疵度的最长元音字符子串，并输出其长度，如果找不到满足条件的元音字符子串，输出0。
 * 子串：字符串中任意个连续的字符组成的子序列称为该字符串的子串。
 * @date 2024/3/11 15:22
 */
public class test051 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读取预期的瑕疵度
        int flaw = scanner.nextInt();
        scanner.nextLine(); // 读取换行符
        // 读取输入的字符串
        String s = scanner.nextLine();
        // 计算并输出结果
        System.out.println(findLongestSubstringWithFlaw(s, flaw));
    }

    // 检查一个字符是否是元音字符的方法
    private static boolean isVowel(char ch) {
        /** 将字符转换为小写，并检查它是否在元音字符集中 */
        return "aeiou".indexOf(Character.toLowerCase(ch)) != -1;
    }

    // 查找具有指定瑕疵度的最长子串的方法
    private static int findLongestSubstringWithFlaw(String s, int flaw) {
        int n = s.length(); // 获取输入字符串的长度
        int maxLen = 0; // 初始化最长子串长度为0
        // 外层循环：遍历字符串的每个字符
        for (int i = 0; i < n; i++) {
            // 如果当前字符是元音字符，则考虑它作为子串的起始位置
            if (isVowel(s.charAt(i))) {
                int currentFlaw = 0; // 初始化当前子串的瑕疵度为0
                // 内层循环：从当前元音字符开始，向后遍历
                for (int j = i; j < n; j++) {
                    // 如果当前字符不是元音字符，瑕疵度加1
                    if (!isVowel(s.charAt(j))) {
                        currentFlaw++;
                    }
                    // 如果瑕疵度超过了允许的最大值，结束内层循环
                    if (currentFlaw > flaw) {
                        break;
                    }
                    // 如果当前字符是元音字符且瑕疵度与预期相符，更新最长子串长度
                    if (isVowel(s.charAt(j)) && currentFlaw == flaw) {
                        maxLen = Math.max(maxLen, j - i + 1);
                    }
                }
            }
        }
        // 返回最长子串的长度
        return maxLen;
    }
}



